package com.zut.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.zut.dao.CheckItemDao;
import com.zut.entity.PageResult;
import com.zut.entity.QueryPageBean;
import com.zut.entity.Result;
import com.zut.pojo.CheckItem;
import com.zut.service.CheckItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 检查项服务
 * @author sq
 * @create 2021-06-22-17:20
 */
//添加事务注解之后，必须明确当前这个服务实现的是哪一个服务接口
@Service(interfaceClass = CheckItemService.class)
//事务注解
@Transactional
//实现health_interface中的接口
public class CheckItemServiceImpl implements CheckItemService {
    //注入DAO对象
    @Autowired
    private CheckItemDao checkItemDao;

    //添加检查项数据，执行insert插入语句，写入到数据库中。
    public void add(CheckItem checkItem) {
        //调用Dao接口中的方法，不需要实现Dao接口的实现类。
        checkItemDao.add(checkItem);
    }

    //检查项分页查询，执行select查询语句，从数据库中获取数据。
    public PageResult pageQuery(QueryPageBean queryPageBean) {
        //从json封装后的QueryPageBean对象中获得当前页数据
        Integer currentPage = queryPageBean.getCurrentPage();
        //从json封装后的QueryPageBean对象中获得页码
        Integer pageSize = queryPageBean.getPageSize();
        //从json封装后的QueryPageBean对象中获得查询条件
        String queryString = queryPageBean.getQueryString();
        //完成分页查询，基于MyBatis框架提供的分页助手插件完成。
        PageHelper.startPage(currentPage,pageSize);
        //Page是分页插件封装的查询数据的集合
        Page<CheckItem> page = checkItemDao.selectByCondition(queryString);
        //获得查询的总记录数
        long total = page.getTotal();
        //获得查询的CheckItem集合的行数。
        List<CheckItem> rows = page.getResult();
        //返回查询结果，封装在PageResult对象中。
        return new PageResult(total,rows);
    }

    //根据id删除检查项
    public void deleteById(Integer id) {
        //判断当前检查组是否已经关联到检查组
        long count = checkItemDao.findCountByCheckItemId(id);
        if(count > 0){
            //当前检查项已经被关联到检查组，不准需删除。
            new RuntimeException();
        }
        //根据id删除检查项
        checkItemDao.deleteById(id);
    }

    //编辑修改检查项
    public void edit(CheckItem checkItem) {
        //调用接口中的方法，执行映射文件中的sql语句。
        checkItemDao.edit(checkItem);
    }

    //根据id查询一条检查项
    public CheckItem findById(Integer id) {
        //调用接口中的方法，执行映射文件中的sql语句。
        return checkItemDao.findById(id);
    }

    //查询所有检查项
    public List<CheckItem> findAll() {
        //调用接口中的方法，执行映射文件中的sql语句。
        return checkItemDao.findAll();
    }
}
